import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

import 'common/routers/index.dart';
import 'common/utils/index.dart';
import 'common/services/index.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 设置全局默认的系统UI样式
  _setSystemUIStyle();

  // 🔥 初始化 LoadingUtil（黑底半透明风格）
  LoadingUtil.init();

  // 初始化应用生命周期管理器
  await _initAppLifecycle();

  // 初始化服务定位器
  await _initServices();

  runApp(const MyApp());
}

/// 设置系统UI样式
void _setSystemUIStyle() {
  debugPrint('🎨 设置系统UI样式 - 状态栏透明');

  // 使用工具类设置透明状态栏
  SystemUIUtils.setTransparentStatusBarDark();
  SystemUIUtils.setNormalMode();

  debugPrint('✅ 系统UI样式设置完成');

  // 调试信息
  if (kDebugMode) {
    final uiInfo = SystemUIUtils.getSystemUIInfo();
    debugPrint('📱 系统UI信息: $uiInfo');
  }
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    // 🔥 使用 ScreenUtilInit 包裹整个应用（必须在最外层）
    return ScreenUtilInit(
      // 设计稿尺寸（单位：dp）
      // 📐 使用 iPhone X 的标准尺寸：375×812
      designSize: const Size(375, 812),

      // 是否根据屏幕宽度自适应文本
      // 建议开启，让文字在不同设备上更清晰
      minTextAdapt: true,

      // 支持分屏模式
      // iPad 和部分 Android 设备需要
      splitScreenMode: true,

      // 构建应用
      builder: (context, child) {
        return GetMaterialApp(
          title: '奇刷刷',
          debugShowCheckedModeBanner: false, // 去掉右上角DEBUG标签
          // 🔥 关键：配置 EasyLoading builder
          builder: EasyLoading.init(),
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            // 🎯 全局解决AppBar滑动灰度问题
            appBarTheme: const AppBarTheme(
              surfaceTintColor: Colors.transparent, // 移除MD3表面着色
              shadowColor: Colors.transparent, // 移除阴影颜色
              scrolledUnderElevation: 0, // 滚动时elevation为0
            ),
          ),
          initialRoute: RouteNames.systemSplash, // 初始路由设置为闪屏页面
          getPages: RoutePages.list, // 路由页面配置
          navigatorObservers: [
            RoutePages.observer, // 路由观察者
          ],
        );
      },
    );
  }
}

/// 初始化应用生命周期管理器
Future<void> _initAppLifecycle() async {
  debugPrint('🔄 初始化应用生命周期管理器');

  // 注册生命周期管理器为GetX服务
  Get.put(AppLifecycleManager.instance, permanent: true);

  // 添加一些全局生命周期回调示例
  AppLifecycleManager.instance.addForegroundCallback(() {
    debugPrint('📱 应用回到前台');
    // 这里可以添加前台逻辑，如刷新数据、恢复定时器等
  });

  AppLifecycleManager.instance.addBackgroundCallback(() {
    debugPrint('📱 应用进入后台');
    // 这里可以添加后台逻辑，如保存数据、暂停定时器等
  });

  AppLifecycleManager.instance.addStateChangeCallback((oldState, newState) {
    debugPrint('📱 应用状态变化: ${oldState.name} → ${newState.name}');
  });

  debugPrint('✅ 应用生命周期管理器初始化完成');
}

/// 初始化服务定位器
Future<void> _initServices() async {
  debugPrint('🔧 初始化服务定位器...');

  try {
    // 使用服务定位器初始化所有服务
    await ServiceLocator.init();

    // 打印应用基本信息（仅在调试模式下）
    if (kDebugMode) {
      try {
        final packageInfoService = Get.find<PackageInfoService>();
        final appInfo = packageInfoService.getAppInfoSummary();
        debugPrint('📱 应用信息: $appInfo');
      } catch (e) {
        debugPrint('❌ 获取应用信息失败: $e');
      }
    }

    debugPrint('✅ 服务定位器初始化完成');
  } catch (e) {
    debugPrint('❌ 服务初始化失败: $e');
    debugPrint('💡 将使用默认配置启动应用');
    // 如果初始化失败，可以继续运行应用，但功能可能受限
  }
}
